package com.yumeng.common.helper;

import com.yumeng.common.data.constants.FlagConstants;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author wxd
 * @date 2021/7/22 14:27
 */
public class StringHelper {

    /**
     * 空字符串 ""
     */
    public static final String EMPTY_STR = "";

    public static String trim(String source) {
        if (source == null) {
            return null;
        }
        return source.trim();
    }

    public static String trim(String source, String defaultVal) {
        if (source == null) {
            return defaultVal;
        }
        return source.trim();
    }

    /**
     * 去掉左边所有指定字符
     * @param flag
     * @return
     */
    public static String trimLeftAll(String source, String flag) {
        if (StringUtils.isNotBlank(source)) {
            String regex = "^"+flag+"*";
            return source.replaceAll(regex, "");
        }else {
            return "";
        }
    }

    /**
     * 去掉右边所有指定字符
     * @param flag
     * @return
     */
    public static String trimRightAll(String source, String flag) {
        if (StringUtils.isNotBlank(source)) {
            String regex = flag + "*$";
            return source.replaceAll(regex, "");
        }else {
            return "";
        }
    }

    /**
     * 去掉两边所有指定字符
     * @param flag
     * @return
     */
    public static String trimAll(String source, String flag) {
        if (StringUtils.isNotBlank(source)) {
            String regex = "(^"+flag+"*)|("+flag+"*$)";
            return source.replaceAll(regex, "");
        }else {
            return "";
        }
    }

    /**
     * 添加两边指定的字符
     * @param source
     * @param flag
     * @return
     */
    public static String addTrimFlag(String source, String flag){
        source = trimAll(source, flag);
        if (StringUtils.isNotBlank(source)) {
            return flag + source + flag;
        }else {
            return "";
        }
    }

    /**
     * 转化成String, null返回null，不返回“null”
     * @param obj
     * @return
     */
    public static String valueOfNonNull(Object obj){
        return obj != null ? obj.toString() : null;
    }

    /**
     * 转化成String, null返回""，不返回“null”
     * @param obj
     * @return
     */
    public static String valueOfNonNullBlank(Object obj){
        return obj != null ? obj.toString() : "";
    }

    /**
     * 批量替换前缀
     *
     * @param replaceStr 替换值
     * @param prefixList 替换（查找）列表
     * @return
     */
    public static String replaceFirstPrefix(String replaceStr, String[] prefixList) {
        String str = replaceStr;
        for (String prefix : prefixList) {
            if (replaceStr.startsWith(prefix)) {
                str = replaceStr.replaceFirst(prefix, EMPTY_STR);
                break;
            }
        }
        return str;
    }

    /**
     * 判断是否存在目标字符串
     *
     * @param str
     * @param partList
     * @return
     */
    public static boolean contains(String str, String... partList){
        if (StringUtils.isBlank(str) || ArrayUtils.isEmpty(partList)){
            return false;
        }
        for (String partStr : partList){
            if (str.contains(partStr)){
                return true;
            }
        }
        return false;
    }

    /**
     * 获取按标记分组后的最后一个部分
     * @param str
     * @param flag
     * @return
     */
    public static String getLastPart(String str, String flag){
        if (StringUtils.isBlank(str)){
            return EMPTY_STR;
        }
        int lastIndex = str.lastIndexOf(flag);
        int nameLength = str.length();
        return StringUtils.substring(str, lastIndex + 1, nameLength);
    }

    /**
     * 获取按标记分组后的第一个部分
     * @param str
     * @param flag
     * @return
     */
    public static String getFirstPart(String str, String flag){
        if (StringUtils.isBlank(str)){
            return EMPTY_STR;
        }
        int index = str.indexOf(flag);
        return StringUtils.substring(str, 0, index);
    }



    /**
     * 将list转换成String
     * @param list
     * @return
     */
    public static String listToString(List<String> list) {
        if (list != null) {
            return String.join(FlagConstants.COMMA_FLAG, list);
        }else {
            return "";
        }
    }

    public static String listIntToString(List<Integer> list) {
        if (list != null && list.size() > 0) {
            String str = "";
            for (Integer i : list){
                str += i + FlagConstants.COMMA_FLAG;
            }
            return  str.substring(0, str.length() - 1);
        }else {
            return "";
        }
    }

    /**
     * 将list转换成String
     * @param list
     * @return
     */
    public static String listToString(String flag, List<String> list) {
        if (list != null) {
            return String.join(flag, list);
        }else {
            return "";
        }
    }

    /**
     * 将String转换成List
     * @param str
     * @return
     */
    public static List<String> stringToList(String str) {
        if (StringUtils.isNotBlank(str)){
            return Arrays.asList(str.split(FlagConstants.COMMA_FLAG, -1));
        }else{
            return new ArrayList<>();
        }
    }

    /**
     * 将String转换成List
     * @param str
     * @return
     */
    public static List<String> stringToList(String str, String flag) {
        if (StringUtils.isNotBlank(str)){
            return Arrays.asList(str.split(flag, -1));
        }else{
            return new ArrayList<>();
        }
    }

    /**
     * 将String转换成数组
     * @param str
     * @return
     */
    public static String[] stringToArray(String str, String flag) {
        if (StringUtils.isNotBlank(str)){
            return str.split(flag, -1);
        }else{
            return null;
        }
    }
    /**
     * 将String转换成数组
     * @param str
     * @return
     */
    public static String[] stringToArray(String str) {
        if (StringUtils.isNotBlank(str)){
            return str.split(FlagConstants.COMMA_FLAG, -1);
        }else{
            return null;
        }
    }

    /**
     * 首字母转换小写
     *
     * @param param 需要转换的字符串
     * @return 转换好的字符串
     */
    public static String firstToLowerCase(String param) {
        if (StringUtils.isBlank(param)) {
            return EMPTY_STR;
        }
        return param.substring(0, 1).toLowerCase() + param.substring(1);
    }

    /**
     * 首字母转换大写
     *
     * @param param 需要转换的字符串
     * @return 转换好的字符串
     */
    public static String firstToUpperCase(String param) {
        if (StringUtils.isBlank(param)) {
            return EMPTY_STR;
        }
        return param.substring(0, 1).toUpperCase() + param.substring(1);
    }

}
